package com.atguigu.day13.teacher.in4;

import org.junit.Test;

/*
匿名内部类:
     位置: 在方法内,没有名字的局部内部类
     作用:简化代码
     创建: new 接口(){}
          new 普通类/抽象类(){}
     意义:1.完成了该类或接口的匿名子类创建
         2.完成了该匿名子类对象创建
     注意:
        1.没有名字的局部内部类 使用所在方法的局部变量 变量会被final修饰
        2.匿名内部类会产生独立的字节码文件
          命名方式 外部类名$序号.class InnerTest$1.class  序号从1开始

 */
public class InnerTest {
    @Test
    public void test07(){
        /*final*/int num = 20;
       // num=66;
      new Fly(){
          @Override
          public void flying() {
              System.out.println(num);
          }
      }.flying();
    }


    @Test
    public void test06() {
        new Person("李白", 20) {
            @Override
            public void showName() {
                System.out.println(name + "," + age);
            }
        }.showName();
    }

    @Test
    public void test05() {
        new Person() {

        }.showName();

    }

    @Test
    public void test04() {
        Animal a = new Animal() {
            @Override
            public void eat() {
                System.out.println("小狗爱吃骨头");
            }

            @Override
            public void sleep() {
                System.out.println("小狗爱睡觉");
            }
        };
        a.eat();
        a.sleep();
    }


    @Test
    public void test03() {
        Cat cat = new Cat();
        cat.eat();
        cat.sleep();
    }


    @Test
    public void test02() {
        new Fly() {
            @Override
            public void flying() {
                System.out.println("超人飞......");
            }
        }.flying();
    }

    @Test
    public void test01() {
        Bird bird = new Bird();
        bird.flying();
    }
}
